package cn.foolishbird.crow.resource.permission.api;

import cn.foolishbird.crow.resource.permission.Permission;
import cn.foolishbird.crow.resource.permission.Role;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @author foolish bird
 */
public interface ResourcePermissionApi {

    /**
     * 根据用户编号，查询用户权限
     *
     * @param userNo 用户编号
     * @return 用户编号
     */
    default List<? extends Role> roles(String userNo) {
        return roles(userNo, true);
    }

    /**
     * 根据用户编号，查询用户权限
     *
     * @param userNo         用户编号
     * @param fillPermission 是否填充资源权限
     * @return 用户角色
     */
    List<? extends Role> roles(String userNo, boolean fillPermission);

    /**
     * @param userNo  用户编号
     * @param roleNos 角色编号
     * @return 设置是否成功
     */
    boolean refreshRolesInUser(String userNo, List<String> roleNos);

    /**
     * 给角色设置资源权限
     *
     * @param roleNo        角色编号
     * @param permissionNos 权限编号
     * @return 设置是否成功
     */
    boolean refreshPermissionsInRole(String roleNo, List<String> permissionNos);


    /**
     * @param userNo 用户编号
     * @return 用户权限
     */
    List<? extends Permission> permissions(String userNo);


    /**
     * 用户身份【所有的权限】临时赋予另外一个用户
     *
     * @param targetUserNo 被赋予用户
     * @param sourceUserNo 用户
     * @param grantTime    赋予时长
     * @param unit         时长单位
     * @return 如果返回true，则是赋予成功
     */
    default boolean tempGrant(String targetUserNo, String sourceUserNo, long grantTime, TimeUnit unit) {
        return false;
    }

}
